0x60806040526004361061019a5760003560e01c806380f288c4116100e1578063a6afeb421161008a578063de86b45b11610064578063de86b45b14610552578063e3ed417314610572578063f23a6e6114610592578063f2fde38b146105d857600080fd5b8063a6afeb42146104ca578063bc197c81146104ea578063d9caed121461053257600080fd5b806388c344fa116100bb57806388c344fa146104555780638da5cb5b14610475578063904a205a146104aa57600080fd5b806380f288c4146103f55780638134245714610415578063887268de1461043557600080fd5b80634782f779116101435780635c6f6c211161011d5780635c6f6c2114610326578063715018a61461034657806379502c551461035b57600080fd5b80634782f779146102d357806347e7ef24146102f35780635358fbda1461031357600080fd5b80631626ba7e116101745780631626ba7e146102735780632d2dcc4814610293578063355007f9146102b357600080fd5b806301ffc9a7146101a657806306948316146101db578063150b7a02146101fd57600080fd5b366101a157005b600080fd5b3480156101b257600080fd5b506101c66101c13660046129dc565b6105f8565b60405190151581526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004612a1b565b610691565b005b34801561020957600080fd5b50610242610218366004612aa3565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101d2565b34801561027f57600080fd5b5061024261028e366004612b16565b6108aa565b34801561029f57600080fd5b506101fb6102ae366004612b62565b6109fd565b3480156102bf57600080fd5b506101fb6102ce366004612b7f565b610a81565b3480156102df57600080fd5b506101fb6102ee366004612bc0565b610ca6565b3480156102ff57600080fd5b506101fb61030e366004612bc0565b610e16565b6101fb610321366004612bec565b610f2e565b34801561033257600080fd5b506101fb610341366004612c4a565b610fea565b34801561035257600080fd5b506101fb611216565b34801561036757600080fd5b506002546003546004546103b39273ffffffffffffffffffffffffffffffffffffffff908116928116919081169074010000000000000000000000000000000000000000900460ff1684565b6040516101d2949392919073ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292166040820152901515606082015260800190565b34801561040157600080fd5b506101fb610410366004612cdf565b61122a565b34801561042157600080fd5b506101fb610430366004612f6c565b6113f1565b34801561044157600080fd5b506101fb610450366004613060565b6115cb565b34801561046157600080fd5b506101fb610470366004612bc0565b61164e565b34801561048157600080fd5b5060015460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b3480156104b657600080fd5b506101fb6104c5366004612b62565b6117e6565b3480156104d657600080fd5b506101fb6104e536600461307d565b611863565b3480156104f657600080fd5b506102426105053660046130cc565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561053e57600080fd5b506101fb61054d366004612b7f565b611989565b34801561055e57600080fd5b506101fb61056d36600461318b565b611b19565b34801561057e57600080fd5b506101fb61058d366004612b62565b611cd9565b34801561059e57600080fd5b506102426105ad3660046131c0565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b3480156105e457600080fd5b506101fb6105f3366004612b62565b611d56565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061068b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600260005403610702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610758576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166107a5576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff242432a00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8581166024830152604482018490526064820183905260a06084830152600060a483015284169063f242432a9060c401600060405180830381600087803b15801561083057600080fd5b505af1158015610844573d6000803e3d6000fd5b5050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881694508816925033917fc4d86acceb93756cc872680b8326307ac5727a6afe973f1bbb473d2fde51e678910160405180910390a4505060016000555050565b60008060006108ef8686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e0d92505050565b909250905060008160048111156109085761090861322a565b1461093857507fffffffff0000000000000000000000000000000000000000000000000000000091506109f69050565b60015473ffffffffffffffffffffffffffffffffffffffff838116911614806109a0575060045474010000000000000000000000000000000000000000900460ff1680156109a0575060045473ffffffffffffffffffffffffffffffffffffffff8381169116145b156109d057507f1626ba7e0000000000000000000000000000000000000000000000000000000091506109f69050565b507fffffffff000000000000000000000000000000000000000000000000000000009150505b9392505050565b610a05611e52565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405190815233907f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a4350906020015b60405180910390a250565b600260005403610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610b43576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316610b90576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8481166024830152604482018390528316906342842e0e90606401600060405180830381600087803b158015610c0657600080fd5b505af1158015610c1a573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f54789674de495cad7d8be412a7be3020d5655b17b0e9a6d5760beaca3486714d84604051610c9491815260200190565b60405180910390a45050600160005550565b600260005403610d12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610d68576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dbf8282611ed3565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907f68f3f01094d76436d2b40073d16523c89b1033e2d5af5c9210fbc8cf8c8b222c906020015b60405180910390a350506001600055565b600260005403610e82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610ed8576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ee482333084612032565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907ff1444b5cad7ce70cb018d1b8edc8618fe303f3c7f034d8d572a6e27facbf2bef90602001610e05565b60035473ffffffffffffffffffffffffffffffffffffffff163314610f7f576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803414610fb8576040517fd2ade55600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405181815233907f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df090602001610a76565b600260005403611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff1633146110ac576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86166110f9576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2eb2c2d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690632eb2c2d6906111559030908a9089908990899089906004016132a4565b600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b2463c151ac82c4cb0541aefb7ef273d8ddfa9e713902ac2cacd78ca019ce61878787876040516112019493929190613310565b60405180910390a45050600160005550505050565b61121e611e52565b6112286000612114565b565b600260005403611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff1633146112ec576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2eb2c2d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690632eb2c2d690611348903390309089908990899089906004016132a4565b600060405180830381600087803b15801561136257600080fd5b505af1158015611376573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e56f2617c2f689fa341b07c22e2c8fecef8dc378f82de05f325570a0335d991868686866040516113dd9493929190613310565b60405180910390a350506001600055505050565b60026000540361145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560045473ffffffffffffffffffffffffffffffffffffffff1633146114b3576040517f0642977400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff16611502576040517f6a1ea4f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151835114158061151557508051835114155b1561154c576040517f6889ba9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b83518110156115c0576115ae84828151811061156d5761156d613337565b602002602001015184838151811061158757611587613337565b60200260200101518484815181106115a1576115a1613337565b602002602001015161218b565b806115b881613366565b91505061154f565b505060016000555050565b6115d3611e52565b6004805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90911617905560405133907f5162fedc53e4434f721903247a4c636028aeaea5d7f233a08d10e4819ae168de90610a7690841515815260200190565b6002600054036116ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314611710576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff8316906342842e0e90606401600060405180830381600087803b15801561178457600080fd5b505af1158015611798573d6000803e3d6000fd5b505060405183815273ffffffffffffffffffffffffffffffffffffffff851692503391507f7b0968491e6388dede5df5611efde9e7b0795034130e23853ddc87b8dffbe45290602001610e05565b6117ee611e52565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405190815233907fc204b28865760f18aa0ef147ee25573d2dba9f208385c8aa65fb79150978fb6d90602001610a76565b6002600054036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560045473ffffffffffffffffffffffffffffffffffffffff163314611925576040517f0642977400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff16611974576040517f6a1ea4f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61197f83838361218b565b5050600160005550565b6002600054036119f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314611a4b576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611a98576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aa382848361251e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f83833173372af3b4075d05abbc2b4aea97ebb6ba867413337693d672a92bc43e84604051610c9491815260200190565b600260005403611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314611bdb576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff242432a000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526064810182905260a06084820152600060a482015273ffffffffffffffffffffffffffffffffffffffff84169063f242432a9060c401600060405180830381600087803b158015611c6457600080fd5b505af1158015611c78573d6000803e3d6000fd5b5050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff871693503392507f400235142db830a227212d23698fc49d9ac2a809e058be21792a7fd2f82dd8d2910160405180910390a35050600160005550565b611ce1611e52565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405190815233907f14d590dc20062c9c8cf8005e532197986310804b0b6108e3b7b68321b8ac49d190602001610a76565b611d5e611e52565b73ffffffffffffffffffffffffffffffffffffffff8116611e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f9565b611e0a81612114565b50565b6000808251604103611e435760208301516040840151606085015160001a611e3787828585612574565b94509450505050611e4b565b506000905060025b9250929050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f9565b80471015611f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106f9565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611f97576040519150601f19603f3d011682016040523d82523d6000602084013e611f9c565b606091505b505090508061202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106f9565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261210e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261268c565b50505050565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002546040517f61f7cd6900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260009216906361f7cd6990602401602060405180830381865afa1580156121fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222091906133c5565b905073ffffffffffffffffffffffffffffffffffffffff811661226f576040517f8e6a5fd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6122bd576040517fc0968fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16846040516122e59190613406565b600060405180830381855afa9150503d8060008114612320576040519150601f19603f3d011682016040523d82523d6000602084013e612325565b606091505b5091509150816123385761233881612798565b8051600003612373576040517fbf51d1b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808060200190518101906123879190613422565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166359faaa0360e01b146123e5576040517fbf51d1b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86163b612433576040517fa710429d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1685856040516124599190613406565b60006040518083038185875af1925050503d8060008114612496576040519150601f19603f3d011682016040523d82523d6000602084013e61249b565b606091505b509092509050816124af576124af81612798565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f682f19be1a048eacbee9fac60bfc29800c7afb293721778db52a84f7ea3d8f69878760405161250e929190613489565b60405180910390a3505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261202d9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161208c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156125ab5750600090506003612683565b8460ff16601b141580156125c357508460ff16601c14155b156125d45750600090506004612683565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612628573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661267c57600060019250925050612683565b9150600090505b94509492505050565b60006126ee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127ae9092919063ffffffff16565b80519091501561202d578080602001905181019061270c91906134a2565b61202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106f9565b80516000036127a657600080fd5b805181602001fd5b60606127bd84846000856127c5565b949350505050565b606082471015612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106f9565b73ffffffffffffffffffffffffffffffffffffffff85163b6128d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106f9565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128fe9190613406565b60006040518083038185875af1925050503d806000811461293b576040519150601f19603f3d011682016040523d82523d6000602084013e612940565b606091505b509150915061295082828661295b565b979650505050505050565b6060831561296a5750816109f6565b82511561297a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f991906134bf565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e0a57600080fd5b6000602082840312156129ee57600080fd5b81356109f6816129ae565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0a57600080fd5b60008060008060808587031215612a3157600080fd5b8435612a3c816129f9565b93506020850135612a4c816129f9565b93969395505050506040820135916060013590565b60008083601f840112612a7357600080fd5b50813567ffffffffffffffff811115612a8b57600080fd5b602083019150836020828501011115611e4b57600080fd5b600080600080600060808688031215612abb57600080fd5b8535612ac6816129f9565b94506020860135612ad6816129f9565b935060408601359250606086013567ffffffffffffffff811115612af957600080fd5b612b0588828901612a61565b969995985093965092949392505050565b600080600060408486031215612b2b57600080fd5b83359250602084013567ffffffffffffffff811115612b4957600080fd5b612b5586828701612a61565b9497909650939450505050565b600060208284031215612b7457600080fd5b81356109f6816129f9565b600080600060608486031215612b9457600080fd5b8335612b9f816129f9565b92506020840135612baf816129f9565b929592945050506040919091013590565b60008060408385031215612bd357600080fd5b8235612bde816129f9565b946020939093013593505050565b600060208284031215612bfe57600080fd5b5035919050565b60008083601f840112612c1757600080fd5b50813567ffffffffffffffff811115612c2f57600080fd5b6020830191508360208260051b8501011115611e4b57600080fd5b60008060008060008060808789031215612c6357600080fd5b8635612c6e816129f9565b95506020870135612c7e816129f9565b9450604087013567ffffffffffffffff80821115612c9b57600080fd5b612ca78a838b01612c05565b90965094506060890135915080821115612cc057600080fd5b50612ccd89828a01612c05565b979a9699509497509295939492505050565b600080600080600060608688031215612cf757600080fd5b8535612d02816129f9565b9450602086013567ffffffffffffffff80821115612d1f57600080fd5b612d2b89838a01612c05565b90965094506040880135915080821115612d4457600080fd5b50612b0588828901612c05565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612dc757612dc7612d51565b604052919050565b600067ffffffffffffffff821115612de957612de9612d51565b5060051b60200190565b600082601f830112612e0457600080fd5b81356020612e19612e1483612dcf565b612d80565b82815260059290921b84018101918181019086841115612e3857600080fd5b8286015b84811015612e535780358352918301918301612e3c565b509695505050505050565b600082601f830112612e6f57600080fd5b813567ffffffffffffffff811115612e8957612e89612d51565b612eba60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612d80565b818152846020838601011115612ecf57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112612efd57600080fd5b81356020612f0d612e1483612dcf565b82815260059290921b84018101918181019086841115612f2c57600080fd5b8286015b84811015612e5357803567ffffffffffffffff811115612f505760008081fd5b612f5e8986838b0101612e5e565b845250918301918301612f30565b600080600060608486031215612f8157600080fd5b833567ffffffffffffffff80821115612f9957600080fd5b818601915086601f830112612fad57600080fd5b81356020612fbd612e1483612dcf565b82815260059290921b8401810191818101908a841115612fdc57600080fd5b948201945b83861015613003578535612ff4816129f9565b82529482019490820190612fe1565b9750508701359250508082111561301957600080fd5b61302587838801612df3565b9350604086013591508082111561303b57600080fd5b5061304886828701612eec565b9150509250925092565b8015158114611e0a57600080fd5b60006020828403121561307257600080fd5b81356109f681613052565b60008060006060848603121561309257600080fd5b833561309d816129f9565b925060208401359150604084013567ffffffffffffffff8111156130c057600080fd5b61304886828701612e5e565b60008060008060008060008060a0898b0312156130e857600080fd5b88356130f3816129f9565b97506020890135613103816129f9565b9650604089013567ffffffffffffffff8082111561312057600080fd5b61312c8c838d01612c05565b909850965060608b013591508082111561314557600080fd5b6131518c838d01612c05565b909650945060808b013591508082111561316a57600080fd5b506131778b828c01612a61565b999c989b5096995094979396929594505050565b6000806000606084860312156131a057600080fd5b83356131ab816129f9565b95602085013595506040909401359392505050565b60008060008060008060a087890312156131d957600080fd5b86356131e4816129f9565b955060208701356131f4816129f9565b94506040870135935060608701359250608087013567ffffffffffffffff81111561321e57600080fd5b612ccd89828a01612a61565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561328b57600080fd5b8260051b80836020870137939093016020019392505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525060a060408301526132de60a083018688613259565b82810360608401526132f1818587613259565b8381036080909401939093525050600081526020019695505050505050565b604081526000613324604083018688613259565b8281036020840152612950818587613259565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133be577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b6000602082840312156133d757600080fd5b81516109f6816129f9565b60005b838110156133fd5781810151838201526020016133e5565b50506000910152565b600082516134188184602087016133e2565b9190910192915050565b60006020828403121561343457600080fd5b81516109f6816129ae565b600081518084526134578160208601602086016133e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8281526040602082015260006127bd604083018461343f565b6000602082840312156134b457600080fd5b81516109f681613052565b6020815260006109f6602083018461343f56fea26469706673582212201f8962360bc21e372fafc67869bbcb7694f0402ae016c080f20234d379e835a064736f6c63430008100033
0x60806040523480156200001157600080fd5b5060405162003706380380620037068339810160408190526200003491620001bc565b6001600055620000443362000089565b6001600160a01b0381166200006c57604051633649397d60e21b815260040160405180910390fd5b6200008281620000db60201b62001d561760201c565b50620001ee565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620000e56200015e565b6001600160a01b038116620001505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6200015b8162000089565b50565b6001546001600160a01b03163314620001ba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000147565b565b600060208284031215620001cf57600080fd5b81516001600160a01b0381168114620001e757600080fd5b9392505050565b61350880620001fe6000396000f3fe60806040526004361061019a5760003560e01c806380f288c4116100e1578063a6afeb421161008a578063de86b45b11610064578063de86b45b14610552578063e3ed417314610572578063f23a6e6114610592578063f2fde38b146105d857600080fd5b8063a6afeb42146104ca578063bc197c81146104ea578063d9caed121461053257600080fd5b806388c344fa116100bb57806388c344fa146104555780638da5cb5b14610475578063904a205a146104aa57600080fd5b806380f288c4146103f55780638134245714610415578063887268de1461043557600080fd5b80634782f779116101435780635c6f6c211161011d5780635c6f6c2114610326578063715018a61461034657806379502c551461035b57600080fd5b80634782f779146102d357806347e7ef24146102f35780635358fbda1461031357600080fd5b80631626ba7e116101745780631626ba7e146102735780632d2dcc4814610293578063355007f9146102b357600080fd5b806301ffc9a7146101a657806306948316146101db578063150b7a02146101fd57600080fd5b366101a157005b600080fd5b3480156101b257600080fd5b506101c66101c13660046129dc565b6105f8565b60405190151581526020015b60405180910390f35b3480156101e757600080fd5b506101fb6101f6366004612a1b565b610691565b005b34801561020957600080fd5b50610242610218366004612aa3565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101d2565b34801561027f57600080fd5b5061024261028e366004612b16565b6108aa565b34801561029f57600080fd5b506101fb6102ae366004612b62565b6109fd565b3480156102bf57600080fd5b506101fb6102ce366004612b7f565b610a81565b3480156102df57600080fd5b506101fb6102ee366004612bc0565b610ca6565b3480156102ff57600080fd5b506101fb61030e366004612bc0565b610e16565b6101fb610321366004612bec565b610f2e565b34801561033257600080fd5b506101fb610341366004612c4a565b610fea565b34801561035257600080fd5b506101fb611216565b34801561036757600080fd5b506002546003546004546103b39273ffffffffffffffffffffffffffffffffffffffff908116928116919081169074010000000000000000000000000000000000000000900460ff1684565b6040516101d2949392919073ffffffffffffffffffffffffffffffffffffffff9485168152928416602084015292166040820152901515606082015260800190565b34801561040157600080fd5b506101fb610410366004612cdf565b61122a565b34801561042157600080fd5b506101fb610430366004612f6c565b6113f1565b34801561044157600080fd5b506101fb610450366004613060565b6115cb565b34801561046157600080fd5b506101fb610470366004612bc0565b61164e565b34801561048157600080fd5b5060015460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d2565b3480156104b657600080fd5b506101fb6104c5366004612b62565b6117e6565b3480156104d657600080fd5b506101fb6104e536600461307d565b611863565b3480156104f657600080fd5b506102426105053660046130cc565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561053e57600080fd5b506101fb61054d366004612b7f565b611989565b34801561055e57600080fd5b506101fb61056d36600461318b565b611b19565b34801561057e57600080fd5b506101fb61058d366004612b62565b611cd9565b34801561059e57600080fd5b506102426105ad3660046131c0565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b3480156105e457600080fd5b506101fb6105f3366004612b62565b611d56565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000148061068b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600260005403610702576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610758576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166107a5576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff242432a00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8581166024830152604482018490526064820183905260a06084830152600060a483015284169063f242432a9060c401600060405180830381600087803b15801561083057600080fd5b505af1158015610844573d6000803e3d6000fd5b5050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff80881694508816925033917fc4d86acceb93756cc872680b8326307ac5727a6afe973f1bbb473d2fde51e678910160405180910390a4505060016000555050565b60008060006108ef8686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e0d92505050565b909250905060008160048111156109085761090861322a565b1461093857507fffffffff0000000000000000000000000000000000000000000000000000000091506109f69050565b60015473ffffffffffffffffffffffffffffffffffffffff838116911614806109a0575060045474010000000000000000000000000000000000000000900460ff1680156109a0575060045473ffffffffffffffffffffffffffffffffffffffff8381169116145b156109d057507f1626ba7e0000000000000000000000000000000000000000000000000000000091506109f69050565b507fffffffff000000000000000000000000000000000000000000000000000000009150505b9392505050565b610a05611e52565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405190815233907f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a4350906020015b60405180910390a250565b600260005403610aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610b43576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316610b90576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8481166024830152604482018390528316906342842e0e90606401600060405180830381600087803b158015610c0657600080fd5b505af1158015610c1a573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f54789674de495cad7d8be412a7be3020d5655b17b0e9a6d5760beaca3486714d84604051610c9491815260200190565b60405180910390a45050600160005550565b600260005403610d12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610d68576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610db5576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dbf8282611ed3565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907f68f3f01094d76436d2b40073d16523c89b1033e2d5af5c9210fbc8cf8c8b222c906020015b60405180910390a350506001600055565b600260005403610e82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314610ed8576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ee482333084612032565b60405181815273ffffffffffffffffffffffffffffffffffffffff83169033907ff1444b5cad7ce70cb018d1b8edc8618fe303f3c7f034d8d572a6e27facbf2bef90602001610e05565b60035473ffffffffffffffffffffffffffffffffffffffff163314610f7f576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b803414610fb8576040517fd2ade55600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405181815233907f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df090602001610a76565b600260005403611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff1633146110ac576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86166110f9576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2eb2c2d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690632eb2c2d6906111559030908a9089908990899089906004016132a4565b600060405180830381600087803b15801561116f57600080fd5b505af1158015611183573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6b2463c151ac82c4cb0541aefb7ef273d8ddfa9e713902ac2cacd78ca019ce61878787876040516112019493929190613310565b60405180910390a45050600160005550505050565b61121e611e52565b6112286000612114565b565b600260005403611296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff1633146112ec576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2eb2c2d600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861690632eb2c2d690611348903390309089908990899089906004016132a4565b600060405180830381600087803b15801561136257600080fd5b505af1158015611376573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f7e56f2617c2f689fa341b07c22e2c8fecef8dc378f82de05f325570a0335d991868686866040516113dd9493929190613310565b60405180910390a350506001600055505050565b60026000540361145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560045473ffffffffffffffffffffffffffffffffffffffff1633146114b3576040517f0642977400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff16611502576040517f6a1ea4f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8151835114158061151557508051835114155b1561154c576040517f6889ba9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b83518110156115c0576115ae84828151811061156d5761156d613337565b602002602001015184838151811061158757611587613337565b60200260200101518484815181106115a1576115a1613337565b602002602001015161218b565b806115b881613366565b91505061154f565b505060016000555050565b6115d3611e52565b6004805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90911617905560405133907f5162fedc53e4434f721903247a4c636028aeaea5d7f233a08d10e4819ae168de90610a7690841515815260200190565b6002600054036116ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314611710576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f42842e0e0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810182905273ffffffffffffffffffffffffffffffffffffffff8316906342842e0e90606401600060405180830381600087803b15801561178457600080fd5b505af1158015611798573d6000803e3d6000fd5b505060405183815273ffffffffffffffffffffffffffffffffffffffff851692503391507f7b0968491e6388dede5df5611efde9e7b0795034130e23853ddc87b8dffbe45290602001610e05565b6117ee611e52565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405190815233907fc204b28865760f18aa0ef147ee25573d2dba9f208385c8aa65fb79150978fb6d90602001610a76565b6002600054036118cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560045473ffffffffffffffffffffffffffffffffffffffff163314611925576040517f0642977400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff16611974576040517f6a1ea4f600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61197f83838361218b565b5050600160005550565b6002600054036119f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314611a4b576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611a98576040517f44d99fea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aa382848361251e565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f83833173372af3b4075d05abbc2b4aea97ebb6ba867413337693d672a92bc43e84604051610c9491815260200190565b600260005403611b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106f9565b600260005560035473ffffffffffffffffffffffffffffffffffffffff163314611bdb576040517f29ac8f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517ff242432a000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526064810182905260a06084820152600060a482015273ffffffffffffffffffffffffffffffffffffffff84169063f242432a9060c401600060405180830381600087803b158015611c6457600080fd5b505af1158015611c78573d6000803e3d6000fd5b5050604080518581526020810185905273ffffffffffffffffffffffffffffffffffffffff871693503392507f400235142db830a227212d23698fc49d9ac2a809e058be21792a7fd2f82dd8d2910160405180910390a35050600160005550565b611ce1611e52565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831690811790915560405190815233907f14d590dc20062c9c8cf8005e532197986310804b0b6108e3b7b68321b8ac49d190602001610a76565b611d5e611e52565b73ffffffffffffffffffffffffffffffffffffffff8116611e01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f9565b611e0a81612114565b50565b6000808251604103611e435760208301516040840151606085015160001a611e3787828585612574565b94509450505050611e4b565b506000905060025b9250929050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f9565b80471015611f3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016106f9565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611f97576040519150601f19603f3d011682016040523d82523d6000602084013e611f9c565b606091505b505090508061202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016106f9565b505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261210e9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261268c565b50505050565b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002546040517f61f7cd6900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260009216906361f7cd6990602401602060405180830381865afa1580156121fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222091906133c5565b905073ffffffffffffffffffffffffffffffffffffffff811661226f576040517f8e6a5fd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6122bd576040517fc0968fab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff16846040516122e59190613406565b600060405180830381855afa9150503d8060008114612320576040519150601f19603f3d011682016040523d82523d6000602084013e612325565b606091505b5091509150816123385761233881612798565b8051600003612373576040517fbf51d1b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808060200190518101906123879190613422565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166359faaa0360e01b146123e5576040517fbf51d1b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86163b612433576040517fa710429d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1685856040516124599190613406565b60006040518083038185875af1925050503d8060008114612496576040519150601f19603f3d011682016040523d82523d6000602084013e61249b565b606091505b509092509050816124af576124af81612798565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f682f19be1a048eacbee9fac60bfc29800c7afb293721778db52a84f7ea3d8f69878760405161250e929190613489565b60405180910390a3505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261202d9084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161208c565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156125ab5750600090506003612683565b8460ff16601b141580156125c357508460ff16601c14155b156125d45750600090506004612683565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612628573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661267c57600060019250925050612683565b9150600090505b94509492505050565b60006126ee826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127ae9092919063ffffffff16565b80519091501561202d578080602001905181019061270c91906134a2565b61202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106f9565b80516000036127a657600080fd5b805181602001fd5b60606127bd84846000856127c5565b949350505050565b606082471015612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106f9565b73ffffffffffffffffffffffffffffffffffffffff85163b6128d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106f9565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128fe9190613406565b60006040518083038185875af1925050503d806000811461293b576040519150601f19603f3d011682016040523d82523d6000602084013e612940565b606091505b509150915061295082828661295b565b979650505050505050565b6060831561296a5750816109f6565b82511561297a5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f991906134bf565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611e0a57600080fd5b6000602082840312156129ee57600080fd5b81356109f6816129ae565b73ffffffffffffffffffffffffffffffffffffffff81168114611e0a57600080fd5b60008060008060808587031215612a3157600080fd5b8435612a3c816129f9565b93506020850135612a4c816129f9565b93969395505050506040820135916060013590565b60008083601f840112612a7357600080fd5b50813567ffffffffffffffff811115612a8b57600080fd5b602083019150836020828501011115611e4b57600080fd5b600080600080600060808688031215612abb57600080fd5b8535612ac6816129f9565b94506020860135612ad6816129f9565b935060408601359250606086013567ffffffffffffffff811115612af957600080fd5b612b0588828901612a61565b969995985093965092949392505050565b600080600060408486031215612b2b57600080fd5b83359250602084013567ffffffffffffffff811115612b4957600080fd5b612b5586828701612a61565b9497909650939450505050565b600060208284031215612b7457600080fd5b81356109f6816129f9565b600080600060608486031215612b9457600080fd5b8335612b9f816129f9565b92506020840135612baf816129f9565b929592945050506040919091013590565b60008060408385031215612bd357600080fd5b8235612bde816129f9565b946020939093013593505050565b600060208284031215612bfe57600080fd5b5035919050565b60008083601f840112612c1757600080fd5b50813567ffffffffffffffff811115612c2f57600080fd5b6020830191508360208260051b8501011115611e4b57600080fd5b60008060008060008060808789031215612c6357600080fd5b8635612c6e816129f9565b95506020870135612c7e816129f9565b9450604087013567ffffffffffffffff80821115612c9b57600080fd5b612ca78a838b01612c05565b90965094506060890135915080821115612cc057600080fd5b50612ccd89828a01612c05565b979a9699509497509295939492505050565b600080600080600060608688031215612cf757600080fd5b8535612d02816129f9565b9450602086013567ffffffffffffffff80821115612d1f57600080fd5b612d2b89838a01612c05565b90965094506040880135915080821115612d4457600080fd5b50612b0588828901612c05565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612dc757612dc7612d51565b604052919050565b600067ffffffffffffffff821115612de957612de9612d51565b5060051b60200190565b600082601f830112612e0457600080fd5b81356020612e19612e1483612dcf565b612d80565b82815260059290921b84018101918181019086841115612e3857600080fd5b8286015b84811015612e535780358352918301918301612e3c565b509695505050505050565b600082601f830112612e6f57600080fd5b813567ffffffffffffffff811115612e8957612e89612d51565b612eba60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612d80565b818152846020838601011115612ecf57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112612efd57600080fd5b81356020612f0d612e1483612dcf565b82815260059290921b84018101918181019086841115612f2c57600080fd5b8286015b84811015612e5357803567ffffffffffffffff811115612f505760008081fd5b612f5e8986838b0101612e5e565b845250918301918301612f30565b600080600060608486031215612f8157600080fd5b833567ffffffffffffffff80821115612f9957600080fd5b818601915086601f830112612fad57600080fd5b81356020612fbd612e1483612dcf565b82815260059290921b8401810191818101908a841115612fdc57600080fd5b948201945b83861015613003578535612ff4816129f9565b82529482019490820190612fe1565b9750508701359250508082111561301957600080fd5b61302587838801612df3565b9350604086013591508082111561303b57600080fd5b5061304886828701612eec565b9150509250925092565b8015158114611e0a57600080fd5b60006020828403121561307257600080fd5b81356109f681613052565b60008060006060848603121561309257600080fd5b833561309d816129f9565b925060208401359150604084013567ffffffffffffffff8111156130c057600080fd5b61304886828701612e5e565b60008060008060008060008060a0898b0312156130e857600080fd5b88356130f3816129f9565b97506020890135613103816129f9565b9650604089013567ffffffffffffffff8082111561312057600080fd5b61312c8c838d01612c05565b909850965060608b013591508082111561314557600080fd5b6131518c838d01612c05565b909650945060808b013591508082111561316a57600080fd5b506131778b828c01612a61565b999c989b5096995094979396929594505050565b6000806000606084860312156131a057600080fd5b83356131ab816129f9565b95602085013595506040909401359392505050565b60008060008060008060a087890312156131d957600080fd5b86356131e4816129f9565b955060208701356131f4816129f9565b94506040870135935060608701359250608087013567ffffffffffffffff81111561321e57600080fd5b612ccd89828a01612a61565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561328b57600080fd5b8260051b80836020870137939093016020019392505050565b600073ffffffffffffffffffffffffffffffffffffffff808916835280881660208401525060a060408301526132de60a083018688613259565b82810360608401526132f1818587613259565b8381036080909401939093525050600081526020019695505050505050565b604081526000613324604083018688613259565b8281036020840152612950818587613259565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133be577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b6000602082840312156133d757600080fd5b81516109f6816129f9565b60005b838110156133fd5781810151838201526020016133e5565b50506000910152565b600082516134188184602087016133e2565b9190910192915050565b60006020828403121561343457600080fd5b81516109f6816129ae565b600081518084526134578160208601602086016133e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8281526040602082015260006127bd604083018461343f565b6000602082840312156134b457600080fd5b81516109f681613052565b6020815260006109f6602083018461343f56fea26469706673582212201f8962360bc21e372fafc67869bbcb7694f0402ae016c080f20234d379e835a064736f6c6343000810003300000000000000000000000022fe024ffec24631a625113bdf5e9f7d447c8ddf