0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f9578063c3666c3611610097578063e0df5b6f11610071578063e0df5b6f146103f6578063eb79554914610409578063f2fde38b1461041c578063f7ba94bd1461042f57600080fd5b8063c3666c36146103bd578063d505accf146103d0578063dd62ed3e146103e357600080fd5b806395d89b41116100d357806395d89b411461037c578063a457c2d714610384578063a9059cbb14610397578063b88d4fde146103aa57600080fd5b80637ecebe001461034e57806388d695b2146103615780638da5cb5b1461037457600080fd5b80633644e515116101665780634885b254116101405780634885b254146102c6578063572b6c05146102d957806370a082311461032657806373c8a9581461033957600080fd5b80633644e515146102a357806339509351146102ab5780633c130d90146102be57600080fd5b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022f5780632b4c9f1614610242578063313ce5671461028957600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d73660046125a3565b610442565b60405190151581526020015b60405180910390f35b6101f961045c565b6040516101e89190612624565b6101dc610214366004612659565b610473565b61022161049b565b6040519081526020016101e8565b6101dc61023d366004612685565b6104af565b7f000000000000000000000000316a472d084489cb6d4c66e5eb62ae3ada17521e5b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b6102916104da565b60405160ff90911681526020016101e8565b6102216104f1565b6101dc6102b9366004612659565b6104fb565b6101f961051a565b6101dc6102d4366004612712565b610527565b6101dc6102e736600461279a565b7f000000000000000000000000316a472d084489cb6d4c66e5eb62ae3ada17521e73ffffffffffffffffffffffffffffffffffffffff90811691161490565b61022161033436600461279a565b610558565b61034c6103473660046127b7565b610590565b005b61022161035c36600461279a565b6105bf565b6101dc61036f36600461285d565b6105cd565b6102646105fb565b6101f9610622565b6101dc610392366004612659565b610634565b6101dc6103a5366004612659565b610653565b6101dc6103b8366004612910565b610672565b61034c6103cb3660046127b7565b610697565b61034c6103de366004612972565b6106b0565b6102216103f13660046129e9565b6106d7565b61034c610404366004612a22565b610729565b6101dc610417366004612a64565b61074c565b61034c61042a36600461279a565b61076f565b61034c61043d36600461285d565b61078d565b6000610456826104506107aa565b906107d8565b92915050565b606061046e6104696108b2565b6108e0565b905090565b6000610492610480610976565b848461048a610980565b9291906109ae565b50600192915050565b600061046e6104a8610980565b6002015490565b60006104d06104bc610976565b8585856104c7610980565b93929190610a8a565b5060019392505050565b600061046e6104e76108b2565b6002015460ff1690565b600061046e610adc565b6000610492610508610976565b8484610512610980565b929190610b77565b606061046e610469610d29565b600061054c610534610976565b8787878787610541610980565b959493929190610d57565b50600195945050505050565b600061045682610566610980565b9073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205490565b6105a961059b610976565b6105a3611131565b9061115f565b6105b78686868686866111ca565b505050505050565b6000610456826105666112b5565b60006105f06105da610976565b868686866105e6610980565b94939291906112e3565b506001949350505050565b600061046e610608611131565b5473ffffffffffffffffffffffffffffffffffffffff1690565b606061046e61062f6108b2565b61163a565b6000610492610641610976565b848461064b610980565b92919061164b565b6000610492610660610976565b848461066a610980565b929190611783565b600061054c61067f610976565b878787878761068c610980565b959493929190611942565b6106a261059b610976565b6105b78686868686866119af565b6106ce878787878787876106c26112b5565b96959493929190611c45565b50505050505050565b600061072283836106e6610980565b919073ffffffffffffffffffffffffffffffffffffffff9182166000908152600193909301602090815260408085209290931684525290205490565b9392505050565b61073461059b610976565b6107488282610741610d29565b9190611eb4565b5050565b60006105f0610759610976565b86868686610765610980565b9493929190611ec0565b61078a61077a610976565b82610783611131565b9190611f2c565b50565b61079861059b610976565b6107a484848484612040565b50505050565b60008061045660017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e612ab4565b60007c01000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161082857506000610456565b7ffe003659000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161087957506001610456565b507fffffffff00000000000000000000000000000000000000000000000000000000166000908152602091909152604090205460ff1690565b60008061045660017f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82612ab4565b60608160000180546108f190612aee565b80601f016020809104026020016040519081016040528092919081815260200182805461091d90612aee565b801561096a5780601f1061093f5761010080835404028352916020019161096a565b820191906000526020600020905b81548152906001019060200180831161094d57829003601f168201915b50505050509050919050565b600061046e6120ec565b60008061045660017f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef612ab4565b73ffffffffffffffffffffffffffffffffffffffff8216610a18576040517ff7e1ac0f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff838116600081815260018701602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a350505050565b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610ac957610ac98584868461164b565b610ad585848484611783565b5050505050565b6000467f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b0b6104696108b2565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c0016040516020818303038152906040528051906020012091505090565b73ffffffffffffffffffffffffffffffffffffffff8216610bdc576040517ff7e1ac0f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001860160209081526040808320938616835292905220548115610cbb57808201818111610c81576040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201526044810183905260648101849052608401610a0f565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600188016020908152604080832093881683529290522081905590505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d1a91815260200190565b60405180910390a35050505050565b60008061045660017ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839ceb612ab4565b82818114610d91576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610d9f57506106ce565b73ffffffffffffffffffffffffffffffffffffffff86166000908152602089905260408120549080805b848110156110e4576000898983818110610de557610de5612b41565b9050602002016020810190610dfa919061279a565b905073ffffffffffffffffffffffffffffffffffffffff8116610e61576040517f754f425b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c166004820152602401610a0f565b6000888884818110610e7557610e75612b41565b90506020020135905080600014610fb357848101858111610ec2576040517fdedd834100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8095508273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614610f4c57818f60000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550610fb1565b86821115610fac576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e1660048201526024810188905260448101839052606401610a0f565b938101935b505b8173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161101291815260200190565b60405180910390a384158015906110295750838514155b156110da57848603868110611090576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e1660048201526024810188905260448101879052606401610a0f565b8481018f60000160008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b5050600101610dc9565b508973ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611124576111248b8a8c8561164b565b5050505050505050505050565b60008061045660017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd612ab4565b815473ffffffffffffffffffffffffffffffffffffffff828116911614610748576040517f2ef4875e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610a0f565b8483811415806111da5750808214155b15611211576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156112ab576112a388888381811061123157611231612b41565b9050602002016020810190611246919061279a565b85858481811061125857611258612b41565b9050602002013588888581811061127157611271612b41565b9050602002016020810190611286919061279a565b73ffffffffffffffffffffffffffffffffffffffff169190612239565b600101611214565b5050505050505050565b60008061045660017f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011e612ab4565b8281811461131d576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000361132b57506105b7565b73ffffffffffffffffffffffffffffffffffffffff86166000908152602088905260408120549080805b8481101561158c57600089898381811061137157611371612b41565b9050602002016020810190611386919061279a565b905073ffffffffffffffffffffffffffffffffffffffff81166113ed576040517f754f425b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c166004820152602401610a0f565b600088888481811061140157611401612b41565b9050602002013590508060001461151b5784810185811161144e576040517fdedd834100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8095508273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146114b45773ffffffffffffffffffffffffffffffffffffffff8316600090815260208f905260409020805483019055611519565b86821115611514576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e1660048201526024810188905260448101839052606401610a0f565b938101935b505b8173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157a91815260200190565b60405180910390a35050600101611355565b50811580159061159c5750808214155b1561162e57818303838110611603576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1660048201526024810185905260448101849052606401610a0f565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260208c90526040902090820190555b50505050505050505050565b60608160010180546108f190612aee565b73ffffffffffffffffffffffffffffffffffffffff82166116b0576040517ff7e1ac0f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001860160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811480159061171457508115155b15610cbb57818103818110610c81576040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201526044810183905260648101849052608401610a0f565b73ffffffffffffffffffffffffffffffffffffffff82166117e8576040517f754f425b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b80156118e35773ffffffffffffffffffffffffffffffffffffffff8316600090815260208590526040902054818103818110611876576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810183905260448101849052606401610a0f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146118e05773ffffffffffffffffffffffffffffffffffffffff8086166000908152602088905260408082208490559186168152208054840190555b50505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a7c91815260200190565b61194f8787878787610a8a565b73ffffffffffffffffffffffffffffffffffffffff84163b156106ce576106ce8686868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122cb92505050565b8483811415806119bf5750808214155b156119f6576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156112ab576000868683818110611a1557611a15612b41565b9050602002016020810190611a2a919061279a565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd00000000000000000000000000000000000000000000000000000000600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adb9190612b70565b611b29576040517f986b9f1f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610a0f565b868683818110611b3b57611b3b612b41565b9050602002016020810190611b50919061279a565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e308b8b86818110611b7e57611b7e612b41565b9050602002016020810190611b93919061279a565b888887818110611ba557611ba5612b41565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015611c2157600080fd5b505af1158015611c35573d6000803e3d6000fd5b50505050508060010190506119f9565b73ffffffffffffffffffffffffffffffffffffffff8716611c92576040517fa974697600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83421115611ccf576040517fea2b6f5800000000000000000000000000000000000000000000000000000000815260048101859052602401610a0f565b73ffffffffffffffffffffffffffffffffffffffff878116600081815260208b8152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611d6e610adc565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611e32573d6000803e3d6000fd5b5050506020604051035190508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ea3576040517f822a64c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050506112ab87878761048a610980565b826107a4828483612c08565b611ecc86868686611783565b73ffffffffffffffffffffffffffffffffffffffff84163b156105b7576105b78586868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122cb92505050565b825473ffffffffffffffffffffffffffffffffffffffff9081169083168114611f99576040517f2ef4875e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107a45783547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182178655604051908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350505050565b8281811461207a576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b7576120e484848381811061209a5761209a612b41565b905060200201358787848181106120b3576120b3612b41565b90506020020160208101906120c8919061279a565b73ffffffffffffffffffffffffffffffffffffffff16906123d9565b60010161207d565b6000333214806120fc5750601836105b1561210657503390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c7f000000000000000000000000316a472d084489cb6d4c66e5eb62ae3ada17521e73ffffffffffffffffffffffffffffffffffffffff1633148061222857506040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523360248301523060448301527f000000000000000000000000316a472d084489cb6d4c66e5eb62ae3ada17521e169063019a202890606401602060405180830381865afa158015612204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122289190612b70565b1561223257919050565b3391505090565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526122c690849061248f565b505050565b6040517f4fc35859000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff851690634fc3585990612325908990899088908890600401612d22565b6020604051808303816000875af1158015612344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123689190612d7d565b7fffffffff000000000000000000000000000000000000000000000000000000001614610ad5576040517f6d44973600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b8047101561241c576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101829052604401610a0f565b6000808373ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114612477576040519150601f19603f3d011682016040523d82523d6000602084013e61247c565b606091505b5091509150816107a4576107a481612533565b600080602060008451602086016000885af1806124b2576040513d6000823e3d81fd5b50506000513d915081156124ca5780600114156124e4565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156107a4576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610a0f565b8051156125435780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461078a57600080fd5b6000602082840312156125b557600080fd5b813561072281612575565b6000815180845260005b818110156125e6576020818501810151868301820152016125ca565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061072260208301846125c0565b73ffffffffffffffffffffffffffffffffffffffff8116811461078a57600080fd5b6000806040838503121561266c57600080fd5b823561267781612637565b946020939093013593505050565b60008060006060848603121561269a57600080fd5b83356126a581612637565b925060208401356126b581612637565b929592945050506040919091013590565b60008083601f8401126126d857600080fd5b50813567ffffffffffffffff8111156126f057600080fd5b6020830191508360208260051b850101111561270b57600080fd5b9250929050565b60008060008060006060868803121561272a57600080fd5b853561273581612637565b9450602086013567ffffffffffffffff81111561275157600080fd5b61275d888289016126c6565b909550935050604086013567ffffffffffffffff81111561277d57600080fd5b612789888289016126c6565b969995985093965092949392505050565b6000602082840312156127ac57600080fd5b813561072281612637565b600080600080600080606087890312156127d057600080fd5b863567ffffffffffffffff8111156127e757600080fd5b6127f389828a016126c6565b909750955050602087013567ffffffffffffffff81111561281357600080fd5b61281f89828a016126c6565b909550935050604087013567ffffffffffffffff81111561283f57600080fd5b61284b89828a016126c6565b979a9699509497509295939492505050565b6000806000806040858703121561287357600080fd5b843567ffffffffffffffff81111561288a57600080fd5b612896878288016126c6565b909550935050602085013567ffffffffffffffff8111156128b657600080fd5b6128c2878288016126c6565b95989497509550505050565b60008083601f8401126128e057600080fd5b50813567ffffffffffffffff8111156128f857600080fd5b60208301915083602082850101111561270b57600080fd5b60008060008060006080868803121561292857600080fd5b853561293381612637565b9450602086013561294381612637565b935060408601359250606086013567ffffffffffffffff81111561296657600080fd5b612789888289016128ce565b600080600080600080600060e0888a03121561298d57600080fd5b873561299881612637565b965060208801356129a881612637565b95506040880135945060608801359350608088013560ff811681146129cc57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156129fc57600080fd5b8235612a0781612637565b91506020830135612a1781612637565b809150509250929050565b60008060208385031215612a3557600080fd5b823567ffffffffffffffff811115612a4c57600080fd5b612a58858286016128ce565b90969095509350505050565b60008060008060608587031215612a7a57600080fd5b8435612a8581612637565b935060208501359250604085013567ffffffffffffffff811115612aa857600080fd5b6128c2878288016128ce565b81810381811115610456577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181811c90821680612b0257607f821691505b602082108103612b3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612b8257600080fd5b8151801515811461072257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156122c657806000526020600020601f840160051c81016020851015612be85750805b601f840160051c820191505b81811015610ad55760008155600101612bf4565b67ffffffffffffffff831115612c2057612c20612b92565b612c3483612c2e8354612aee565b83612bc1565b6000601f841160018114612c865760008515612c505750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610ad5565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612cd55786850135825560209485019460019092019101612cb5565b5086821015612d10577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000612d7360808301846125c0565b9695505050505050565b600060208284031215612d8f57600080fd5b81516107228161257556fea2646970667358221220ca839d033f97481444a0f1f911e0126c308e70abfb469f67f5e8c5a78ac5ad2c64736f6c634300081c0033
0x60a060405234801561001057600080fd5b506040516136ff3803806136ff83398101604081905261002f916106a3565b80803388888861003d6100bb565b61005383838361004b6100f0565b929190610124565b50505061006e8161006861017260201b60201c565b906101a0565b5061007761020f565b61007f610226565b61008761023b565b61008f610250565b6001600160a01b0316608052506100b083836100a9610265565b9190610293565b5050505050506108ff565b60006100c5610421565b90506100da816336372b0760e01b600161044f565b6100ed81634e83a8c360e11b600161044f565b50565b60008061011e60017f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82610784565b92915050565b8361012f848261082b565b506001840161013e838261082b565b5060028401805460ff191660ff831617905561016c63a219a02560e01b6001610165610421565b919061044f565b50505050565b60008061011e60017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd610784565b6001600160a01b038116156101f65781546001600160a01b0319166001600160a01b03821690811783556040516000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35b61020b6307f5828d60e41b6001610165610421565b5050565b6102246303c130d960e41b6001610165610421565b565b610224634ec7fbed60e11b6001610165610421565b6102246353f41a9760e01b6001610165610421565b61022463602993f360e11b6001610165610421565b60008061011e60017f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef610784565b8151815181146102b6576040516332c1299b60e11b815260040160405180910390fd5b806000036102c45750505050565b6000805b828110156103d65760008582815181106102e4576102e46108e9565b6020026020010151905060006001600160a01b0316816001600160a01b031603610321576040516392fd9c8f60e01b815260040160405180910390fd5b6000858381518110610335576103356108e9565b602002602001015190508060001461038b5783810184811161036a57604051631550ab9f60e21b815260040160405180910390fd5b6001600160a01b038316600090815260208a90526040902080548301905593505b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350506001016102c8565b50801561041a576002850154818101818111610413576040516301b352fb60e11b8152600481018390526024810184905260440160405180910390fd5b6002870155505b5050505050565b60008061011e60017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e610784565b600160e01b6001600160e01b031983160161047d576040516372c683bb60e01b815260040160405180910390fd5b6001600160e01b03199190911660009081526020929092526040909120805460ff1916911515919091179055565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156104e9576104e96104ab565b604052919050565b600082601f83011261050257600080fd5b81516001600160401b0381111561051b5761051b6104ab565b61052e601f8201601f19166020016104c1565b81815284602083860101111561054357600080fd5b60005b8281101561056257602081860181015183830182015201610546565b506000918101602001919091529392505050565b805160ff8116811461058757600080fd5b919050565b60006001600160401b038211156105a5576105a56104ab565b5060051b60200190565b6001600160a01b03811681146100ed57600080fd5b600082601f8301126105d557600080fd5b81516105e86105e38261058c565b6104c1565b8082825260208201915060208360051b86010192508583111561060a57600080fd5b602085015b83811015610630578051610622816105af565b83526020928301920161060f565b5095945050505050565b600082601f83011261064b57600080fd5b81516106596105e38261058c565b8082825260208201915060208360051b86010192508583111561067b57600080fd5b602085015b83811015610630578051835260209283019201610680565b8051610587816105af565b60008060008060008060c087890312156106bc57600080fd5b86516001600160401b038111156106d257600080fd5b6106de89828a016104f1565b602089015190975090506001600160401b038111156106fc57600080fd5b61070889828a016104f1565b95505061071760408801610576565b60608801519094506001600160401b0381111561073357600080fd5b61073f89828a016105c4565b608089015190945090506001600160401b0381111561075d57600080fd5b61076989828a0161063a565b92505061077860a08801610698565b90509295509295509295565b8181038181111561011e57634e487b7160e01b600052601160045260246000fd5b600181811c908216806107b957607f821691505b6020821081036107d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561082657806000526020600020601f840160051c810160208510156108065750805b601f840160051c820191505b8181101561041a5760008155600101610812565b505050565b81516001600160401b03811115610844576108446104ab565b6108588161085284546107a5565b846107df565b6020601f82116001811461088c57600083156108745750848201515b600019600385901b1c1916600184901b17845561041a565b600084815260208120601f198516915b828110156108bc578785015182556020948501946001909201910161089c565b50848210156108da5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b608051612dd061092f60003960008181610244015281816102e90152818161212f01526121bd0152612dd06000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80637ecebe00116100f9578063c3666c3611610097578063e0df5b6f11610071578063e0df5b6f146103f6578063eb79554914610409578063f2fde38b1461041c578063f7ba94bd1461042f57600080fd5b8063c3666c36146103bd578063d505accf146103d0578063dd62ed3e146103e357600080fd5b806395d89b41116100d357806395d89b411461037c578063a457c2d714610384578063a9059cbb14610397578063b88d4fde146103aa57600080fd5b80637ecebe001461034e57806388d695b2146103615780638da5cb5b1461037457600080fd5b80633644e515116101665780634885b254116101405780634885b254146102c6578063572b6c05146102d957806370a082311461032657806373c8a9581461033957600080fd5b80633644e515146102a357806339509351146102ab5780633c130d90146102be57600080fd5b806318160ddd116101a257806318160ddd1461021957806323b872dd1461022f5780632b4c9f1614610242578063313ce5671461028957600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d73660046125a3565b610442565b60405190151581526020015b60405180910390f35b6101f961045c565b6040516101e89190612624565b6101dc610214366004612659565b610473565b61022161049b565b6040519081526020016101e8565b6101dc61023d366004612685565b6104af565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e8565b6102916104da565b60405160ff90911681526020016101e8565b6102216104f1565b6101dc6102b9366004612659565b6104fb565b6101f961051a565b6101dc6102d4366004612712565b610527565b6101dc6102e736600461279a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b61022161033436600461279a565b610558565b61034c6103473660046127b7565b610590565b005b61022161035c36600461279a565b6105bf565b6101dc61036f36600461285d565b6105cd565b6102646105fb565b6101f9610622565b6101dc610392366004612659565b610634565b6101dc6103a5366004612659565b610653565b6101dc6103b8366004612910565b610672565b61034c6103cb3660046127b7565b610697565b61034c6103de366004612972565b6106b0565b6102216103f13660046129e9565b6106d7565b61034c610404366004612a22565b610729565b6101dc610417366004612a64565b61074c565b61034c61042a36600461279a565b61076f565b61034c61043d36600461285d565b61078d565b6000610456826104506107aa565b906107d8565b92915050565b606061046e6104696108b2565b6108e0565b905090565b6000610492610480610976565b848461048a610980565b9291906109ae565b50600192915050565b600061046e6104a8610980565b6002015490565b60006104d06104bc610976565b8585856104c7610980565b93929190610a8a565b5060019392505050565b600061046e6104e76108b2565b6002015460ff1690565b600061046e610adc565b6000610492610508610976565b8484610512610980565b929190610b77565b606061046e610469610d29565b600061054c610534610976565b8787878787610541610980565b959493929190610d57565b50600195945050505050565b600061045682610566610980565b9073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205490565b6105a961059b610976565b6105a3611131565b9061115f565b6105b78686868686866111ca565b505050505050565b6000610456826105666112b5565b60006105f06105da610976565b868686866105e6610980565b94939291906112e3565b506001949350505050565b600061046e610608611131565b5473ffffffffffffffffffffffffffffffffffffffff1690565b606061046e61062f6108b2565b61163a565b6000610492610641610976565b848461064b610980565b92919061164b565b6000610492610660610976565b848461066a610980565b929190611783565b600061054c61067f610976565b878787878761068c610980565b959493929190611942565b6106a261059b610976565b6105b78686868686866119af565b6106ce878787878787876106c26112b5565b96959493929190611c45565b50505050505050565b600061072283836106e6610980565b919073ffffffffffffffffffffffffffffffffffffffff9182166000908152600193909301602090815260408085209290931684525290205490565b9392505050565b61073461059b610976565b6107488282610741610d29565b9190611eb4565b5050565b60006105f0610759610976565b86868686610765610980565b9493929190611ec0565b61078a61077a610976565b82610783611131565b9190611f2c565b50565b61079861059b610976565b6107a484848484612040565b50505050565b60008061045660017fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5e612ab4565b60007c01000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161082857506000610456565b7ffe003659000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161087957506001610456565b507fffffffff00000000000000000000000000000000000000000000000000000000166000908152602091909152604090205460ff1690565b60008061045660017f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82612ab4565b60608160000180546108f190612aee565b80601f016020809104026020016040519081016040528092919081815260200182805461091d90612aee565b801561096a5780601f1061093f5761010080835404028352916020019161096a565b820191906000526020600020905b81548152906001019060200180831161094d57829003601f168201915b50505050509050919050565b600061046e6120ec565b60008061045660017f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef612ab4565b73ffffffffffffffffffffffffffffffffffffffff8216610a18576040517ff7e1ac0f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff838116600081815260018701602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a350505050565b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610ac957610ac98584868461164b565b610ad585848484611783565b5050505050565b6000467f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610b0b6104696108b2565b80516020918201206040805192830193909352918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152608081018290523060a082015260c0016040516020818303038152906040528051906020012091505090565b73ffffffffffffffffffffffffffffffffffffffff8216610bdc576040517ff7e1ac0f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001860160209081526040808320938616835292905220548115610cbb57808201818111610c81576040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201526044810183905260648101849052608401610a0f565b73ffffffffffffffffffffffffffffffffffffffff8086166000908152600188016020908152604080832093881683529290522081905590505b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610d1a91815260200190565b60405180910390a35050505050565b60008061045660017ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839ceb612ab4565b82818114610d91576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610d9f57506106ce565b73ffffffffffffffffffffffffffffffffffffffff86166000908152602089905260408120549080805b848110156110e4576000898983818110610de557610de5612b41565b9050602002016020810190610dfa919061279a565b905073ffffffffffffffffffffffffffffffffffffffff8116610e61576040517f754f425b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c166004820152602401610a0f565b6000888884818110610e7557610e75612b41565b90506020020135905080600014610fb357848101858111610ec2576040517fdedd834100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8095508273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff1614610f4c57818f60000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550610fb1565b86821115610fac576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e1660048201526024810188905260448101839052606401610a0f565b938101935b505b8173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161101291815260200190565b60405180910390a384158015906110295750838514155b156110da57848603868110611090576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e1660048201526024810188905260448101879052606401610a0f565b8481018f60000160008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b5050600101610dc9565b508973ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611124576111248b8a8c8561164b565b5050505050505050505050565b60008061045660017fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cd612ab4565b815473ffffffffffffffffffffffffffffffffffffffff828116911614610748576040517f2ef4875e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610a0f565b8483811415806111da5750808214155b15611211576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156112ab576112a388888381811061123157611231612b41565b9050602002016020810190611246919061279a565b85858481811061125857611258612b41565b9050602002013588888581811061127157611271612b41565b9050602002016020810190611286919061279a565b73ffffffffffffffffffffffffffffffffffffffff169190612239565b600101611214565b5050505050505050565b60008061045660017f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011e612ab4565b8281811461131d576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060000361132b57506105b7565b73ffffffffffffffffffffffffffffffffffffffff86166000908152602088905260408120549080805b8481101561158c57600089898381811061137157611371612b41565b9050602002016020810190611386919061279a565b905073ffffffffffffffffffffffffffffffffffffffff81166113ed576040517f754f425b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c166004820152602401610a0f565b600088888481811061140157611401612b41565b9050602002013590508060001461151b5784810185811161144e576040517fdedd834100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8095508273ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16146114b45773ffffffffffffffffffffffffffffffffffffffff8316600090815260208f905260409020805483019055611519565b86821115611514576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8e1660048201526024810188905260448101839052606401610a0f565b938101935b505b8173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161157a91815260200190565b60405180910390a35050600101611355565b50811580159061159c5750808214155b1561162e57818303838110611603576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b1660048201526024810185905260448101849052606401610a0f565b73ffffffffffffffffffffffffffffffffffffffff8a16600090815260208c90526040902090820190555b50505050505050505050565b60608160010180546108f190612aee565b73ffffffffffffffffffffffffffffffffffffffff82166116b0576040517ff7e1ac0f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526001860160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811480159061171457508115155b15610cbb57818103818110610c81576040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201526044810183905260648101849052608401610a0f565b73ffffffffffffffffffffffffffffffffffffffff82166117e8576040517f754f425b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b80156118e35773ffffffffffffffffffffffffffffffffffffffff8316600090815260208590526040902054818103818110611876576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810183905260448101849052606401610a0f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146118e05773ffffffffffffffffffffffffffffffffffffffff8086166000908152602088905260408082208490559186168152208054840190555b50505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a7c91815260200190565b61194f8787878787610a8a565b73ffffffffffffffffffffffffffffffffffffffff84163b156106ce576106ce8686868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122cb92505050565b8483811415806119bf5750808214155b156119f6576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156112ab576000868683818110611a1557611a15612b41565b9050602002016020810190611a2a919061279a565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd00000000000000000000000000000000000000000000000000000000600482015290915073ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611adb9190612b70565b611b29576040517f986b9f1f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610a0f565b868683818110611b3b57611b3b612b41565b9050602002016020810190611b50919061279a565b73ffffffffffffffffffffffffffffffffffffffff166342842e0e308b8b86818110611b7e57611b7e612b41565b9050602002016020810190611b93919061279a565b888887818110611ba557611ba5612b41565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015611c2157600080fd5b505af1158015611c35573d6000803e3d6000fd5b50505050508060010190506119f9565b73ffffffffffffffffffffffffffffffffffffffff8716611c92576040517fa974697600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83421115611ccf576040517fea2b6f5800000000000000000000000000000000000000000000000000000000815260048101859052602401610a0f565b73ffffffffffffffffffffffffffffffffffffffff878116600081815260208b8152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e09093019093528151919092012090611d6e610adc565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611e32573d6000803e3d6000fd5b5050506020604051035190508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ea3576040517f822a64c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050506112ab87878761048a610980565b826107a4828483612c08565b611ecc86868686611783565b73ffffffffffffffffffffffffffffffffffffffff84163b156105b7576105b78586868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122cb92505050565b825473ffffffffffffffffffffffffffffffffffffffff9081169083168114611f99576040517f2ef4875e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146107a45783547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182178655604051908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350505050565b8281811461207a576040517f6582533600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156105b7576120e484848381811061209a5761209a612b41565b905060200201358787848181106120b3576120b3612b41565b90506020020160208101906120c8919061279a565b73ffffffffffffffffffffffffffffffffffffffff16906123d9565b60010161207d565b6000333214806120fc5750601836105b1561210657503390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1633148061222857506040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301523360248301523060448301527f0000000000000000000000000000000000000000000000000000000000000000169063019a202890606401602060405180830381865afa158015612204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122289190612b70565b1561223257919050565b3391505090565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526122c690849061248f565b505050565b6040517f4fc35859000000000000000000000000000000000000000000000000000000008082529073ffffffffffffffffffffffffffffffffffffffff851690634fc3585990612325908990899088908890600401612d22565b6020604051808303816000875af1158015612344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123689190612d7d565b7fffffffff000000000000000000000000000000000000000000000000000000001614610ad5576040517f6d44973600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610a0f565b8047101561241c576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101829052604401610a0f565b6000808373ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114612477576040519150601f19603f3d011682016040523d82523d6000602084013e61247c565b606091505b5091509150816107a4576107a481612533565b600080602060008451602086016000885af1806124b2576040513d6000823e3d81fd5b50506000513d915081156124ca5780600114156124e4565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156107a4576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610a0f565b8051156125435780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461078a57600080fd5b6000602082840312156125b557600080fd5b813561072281612575565b6000815180845260005b818110156125e6576020818501810151868301820152016125ca565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061072260208301846125c0565b73ffffffffffffffffffffffffffffffffffffffff8116811461078a57600080fd5b6000806040838503121561266c57600080fd5b823561267781612637565b946020939093013593505050565b60008060006060848603121561269a57600080fd5b83356126a581612637565b925060208401356126b581612637565b929592945050506040919091013590565b60008083601f8401126126d857600080fd5b50813567ffffffffffffffff8111156126f057600080fd5b6020830191508360208260051b850101111561270b57600080fd5b9250929050565b60008060008060006060868803121561272a57600080fd5b853561273581612637565b9450602086013567ffffffffffffffff81111561275157600080fd5b61275d888289016126c6565b909550935050604086013567ffffffffffffffff81111561277d57600080fd5b612789888289016126c6565b969995985093965092949392505050565b6000602082840312156127ac57600080fd5b813561072281612637565b600080600080600080606087890312156127d057600080fd5b863567ffffffffffffffff8111156127e757600080fd5b6127f389828a016126c6565b909750955050602087013567ffffffffffffffff81111561281357600080fd5b61281f89828a016126c6565b909550935050604087013567ffffffffffffffff81111561283f57600080fd5b61284b89828a016126c6565b979a9699509497509295939492505050565b6000806000806040858703121561287357600080fd5b843567ffffffffffffffff81111561288a57600080fd5b612896878288016126c6565b909550935050602085013567ffffffffffffffff8111156128b657600080fd5b6128c2878288016126c6565b95989497509550505050565b60008083601f8401126128e057600080fd5b50813567ffffffffffffffff8111156128f857600080fd5b60208301915083602082850101111561270b57600080fd5b60008060008060006080868803121561292857600080fd5b853561293381612637565b9450602086013561294381612637565b935060408601359250606086013567ffffffffffffffff81111561296657600080fd5b612789888289016128ce565b600080600080600080600060e0888a03121561298d57600080fd5b873561299881612637565b965060208801356129a881612637565b95506040880135945060608801359350608088013560ff811681146129cc57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156129fc57600080fd5b8235612a0781612637565b91506020830135612a1781612637565b809150509250929050565b60008060208385031215612a3557600080fd5b823567ffffffffffffffff811115612a4c57600080fd5b612a58858286016128ce565b90969095509350505050565b60008060008060608587031215612a7a57600080fd5b8435612a8581612637565b935060208501359250604085013567ffffffffffffffff811115612aa857600080fd5b6128c2878288016128ce565b81810381811115610456577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181811c90821680612b0257607f821691505b602082108103612b3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612b8257600080fd5b8151801515811461072257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f8211156122c657806000526020600020601f840160051c81016020851015612be85750805b601f840160051c820191505b81811015610ad55760008155600101612bf4565b67ffffffffffffffff831115612c2057612c20612b92565b612c3483612c2e8354612aee565b83612bc1565b6000601f841160018114612c865760008515612c505750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355610ad5565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b82811015612cd55786850135825560209485019460019092019101612cb5565b5086821015612d10577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201526000612d7360808301846125c0565b9695505050505050565b600060208284031215612d8f57600080fd5b81516107228161257556fea2646970667358221220ca839d033f97481444a0f1f911e0126c308e70abfb469f67f5e8c5a78ac5ad2c64736f6c634300081c003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000240000000000000000000000000316a472d084489cb6d4c66e5eb62ae3ada17521e0000000000000000000000000000000000000000000000000000000000000009436865636b6d6174650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000143000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007000000000000000000000000e34f8124d2ff748415a60d0b21c678726f69be46000000000000000000000000385c54c1f449409ae9c1c09a5cee14402d47e67d000000000000000000000000037db8153b5a2fe590abdba1bf0ac2e24ddba007000000000000000000000000084eddaddc60644882b913014e2d496fe5a84a7f0000000000000000000000000f027111ea0b1c465e0c37672674e8c43fb4e0a80000000000000000000000000c8cd82bf406cef039a305f95b46591419b604b60000000000000000000000003aefde412665de6a1df7cb57c55aa98f375eeae200000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000012d17ff8a0b61e0ec000000000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000707f1ec5dcde3d880000000000000000000000000000000000000000000000006342fd08f00f637800000000000000000000000000000000000000000000000039e7139a8c08fa0600000000000000000000000000000000000000000000000039e7139a8c08fa060000000000000000000000000000000000000000000000002116545850052128000000